﻿using System;
using System.Collections.Generic;
using System.DirectoryServices;
using Librerias;
using System.Web;
using Telerik.Web.UI;

namespace Aplicacion.admin.usuarios
{
    ///<summary>
    ///</summary>
    public partial class Editar : System.Web.UI.Page
    {
        ObjetoAd _de;

        private readonly string _adGrupos = Configuracion.Get("ad_unix_groups");

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                _de = new ObjetoAd();
                if (Request.QueryString["uid"] != null)
                {
                    var guid = new Guid(Request.QueryString["uid"]);
                    _de.GetObjeto(guid);

                    RellenarCampos();
                    RellenarGrupos();
                    /*
                    LlenarNisDomain();
                    if (_de.NisDomain != null)
                    {
                        RellenarGrupos();
                        comboGid.SelectedItem = comboGid.Items.FindByValue(_de.GidNumber.ToString());
                    }*/

                }



            }
        }

        private void RellenarCampos()
        {
            #region textboxes
            string[] partes;
            if (_de.Mail != null)
            {
                partes = _de.Mail.Split(new[] { '@' });
            }
            else
            {
                var mail = _de.SamAccountName + "@tierradelfuego.gov.ar";
                partes = mail.Split(new[] { '@' });
            }

            // txtNombre.Text = _de.Properties["givenName"].Value.ToString().toUcFirst();
            txtNombre.Text = _de.Nombre.ToUcFirst();
            txtApellido.Text = _de.Apellido.ToUcFirst();
            txtDNI.Text = _de.DNI != null ? _de.DNI.Trim() : null;
            txtNombreParaMostrar.Text = _de.DisplayName.ToUcFirst();
            txtEmail.Text = _de.Mail;
            txtPrincipalName.Text = partes[0];
            //comboPrincipalName2.Items.Add("@" + partes[1]).Selected = true;

            //txtDominio.Text = Environment.UserDomainName + "/";
            txtSAMAccountName.Text = _de.SamAccountName;
            #endregion
            /*
            txtUid.Text = _de.UidNumber.ToString();
            txtLoginShell.Text = _de.LoginShell;
            txtHomeDirectory.Text = _de.HomeDirectory;
            */
        }
        /*
        private void LlenarNisDomain()
        {
            comboNisDomain.Items.Clear();
            comboNisDomain.Items.Add("tierradelfuego", 1);
            //ListEditItem asd = new ListEditItem(_de.Properties["msSFU30NisDomain"].Value.ToString(), (Int32)1);

            //comboNisDomain.SelectedItem = _de.Properties.Contains("msSFU30NisDomain") ? comboNisDomain.Items.FindByText(_de.Properties["msSFU30NisDomain"].Value.ToString()) : null;
            comboNisDomain.SelectedItem = comboNisDomain.Items.FindByText(_de.NisDomain);
        }
        */
        private void RellenarGrupos()
        {
            var ad = new ObjetoAd(_adGrupos);

            IEnumerable<SearchResult> grupos = ad.GetGrupos();
            int i = 1;
            foreach (var grupo in grupos)
            {
                //DirectoryEntry grp = AD.obtenerUsuario(grupo.Path, "grupo");
                var grp = new ObjetoAd(grupo.Path);
                var item = new RadComboBoxItem();
                item.Value = grp.GidNumber.ToString();
                item.Text = grp.DirectoryEntry.Name.Substring(3);
                comboGid.Items.Add(item);
                i++;
            };
        }

        protected void ComboNisDomainSelectedIndexChanged(object sender, EventArgs e)
        {
            RellenarGrupos();
        }

        /// <summary>
        /// Submit del formulario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnSubmitClick(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;
            if (Request.QueryString["uid"] == null) return;
            _de = new ObjetoAd();
            var guid = new Guid(Request.QueryString["uid"]);
            _de.GetObjeto(guid);

            switch (tabsPropiedades.SelectedIndex)
            {
                case 0:
                    string nombre = txtNombre.Text;
                    string apellido = txtApellido.Text;
                    string displayName = txtNombreParaMostrar.Text;
                    string dni = txtDNI.Text;
                    try
                    {
                        _de.Nombre = nombre;
                        _de.Apellido = apellido;
                        _de.DisplayName = displayName;
                        _de.DNI = dni;
                        

                        Notificaciones.Correcto("El usuario fue modificado correctamente");
                    }
                    catch (Exception ex)
                    {
                        Notificaciones.Error(ex.Message);
                    }

                    break;
                case 1:
                    int gid = int.Parse(comboGid.SelectedItem.Value.ToString());
                    if (cmbForceChangePasswordOnNextLogon.Checked)
                    {
                        _de.UserFlags = ObjetoAd.NormalAccount;
                        _de.PwdLastSet = 0;
                    }
                    else
                    {
                        _de.UserFlags = ObjetoAd.NormalAccount + ObjetoAd.DontExpirePassword;
                    }
                    
                    //_de.GidNumber = gid;
                    Notificaciones.Correcto("El usuario fue modificado correctamente");
                    break;
                    /*
                case TabUnix:
                    string nisdomain = comboNisDomain.SelectedItem.Text;
                    int gid = int.Parse(comboGid.SelectedItem.Value.ToString());
                    string loginShell = txtLoginShell.Text;
                    string homeDirectory = txtHomeDirectory.Text;
                    try
                    {

                        _de.NisDomain = nisdomain;
                        _de.GidNumber = gid;
                        if (_de.UidNumber == 0)
                            _de.SetUltimoUid();
                        _de.Uid = _de.MsSfu30Name = txtSAMAccountName.Text;
                        _de.LoginShell = loginShell;
                        _de.HomeDirectory = homeDirectory;

                        string notificacion = "Usuario modificado correctamente";
                        if (cmbCrearHome.Checked)
                        {
                            if (_de.CrearHome())
                            {
                                notificacion = notificacion + " y su home fue creado";
                            }
                        }


                        Notificaciones.Correcto(notificacion);
                    }
                    catch (Exception ex)
                    {
                        Notificaciones.Error(ex.Message);
                    }
                    break;
                     * */
            }
            Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri);
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            _de = new ObjetoAd();
            if (Request.QueryString["uid"] != null)
            {
                var guid = new Guid(Request.QueryString["uid"]);
                _de.GetObjeto(guid);
                if (_de.Eliminar() == true) {
                    Notificaciones.Correcto("Usuario eliminado correctamente");
                }
                else {
                    Notificaciones.Error("Ocurrio un error al eliminar el usuario");
                }

                Response.Redirect("/admin");
            }
        }
    }
}